GSM GPRS Shield for Arduino Uno

For informations and support:
http://www.gsmlib.org
http://code.google.com/p/gsm-shield-arduino/ (no longer supported)
http://www.open-electronics.org/arduino-gsm-shield/
http://www.futurashop.it/

The below functions are always available in the library.

int attachGPRS(char* domain, char* dom1, char* dom2)
	establishes a GPRS connection with domain using authentication (if needed)
	parameters and return values:
	domain: pointer to a string that contains the domain address of GPRS connection
	dom1: pointer to the username string (don't use if not needed)
	dom2: pointer to the password string (don't use if not needed)
	return:
	0 - unable to establish a GPRS connection 
	1 - connection successfully established

int dettachGPRS()
	disconnects the GPRS connection

int connectTCP(const char* server, int port)
	starts a socket connection to the server at specific port
	parameters and return values:
	server: pointer to the server address string, it can be the IP or normal address
	port: port used to establish a connection
	e.g. gsm.connectTCP("www.google.it",80)
	e.g. gsm.connectTCP("74.125.39.106",80)
	return:
	0 - unable to start the TCP connection
	1 - connected to the server as client
	Sample: GSM_GPRSLibrary_Client

int disconnectTCP()
	stops the TCP connection to the server

int connectTCPServer(int port)
	puts the SIM900 into server mode, waiting for TCP client connection on the specified port.
	parameters and return values:
	port: port used for establish a connection
	return:
	0 - unable to start server connection
	1 - server started successfully, waiting for client connection
	Sample: GSM_GPRSLibrary_Server

void SimpleRead()
	simple way to read from the newsoftserial and print the value on the hardware serial
	Sample: GSM_GPRSLibrary_AT

void SimpleWrite(char *comm)
	simple way to write a string on newsoftserial
	parameters and return values:
	comm: pointer to the string to write
	Sample: GSM_GPRSLibrary_AT

For memory saving, next functions are included in a class, so before use them is needed to include the header and to create the class.

For calling functions is necessary to include the next two lines
include "call.h";
CallGSM call_classname; //the name you choose must be the same in the functions below

void Call(char *number_string)
	calls the specific number
	e.g. call_classname.Call(“+390123456789″);

void Call(int sim_position)
	calls the number stored at the specified SIM position
	e.g. call_classname.Call(1); // call to the number stored at the 1st SIM position

void HangUp(void)
	hangs up call(incoming or active)
	e.g. call_classname.HangUp();

void PickUp(void)
	picks up the incoming call
	e.g. call_classname.PickUp();

For using SMS functions is necessary to include the next two lines
include "sms.h";
SMSGSM sms_classname; //the name you choose must be the same in the functions below

char SendSMS(char *number_str, char *message_str)
	sends SMS to the specific phone number
	parameters and return values:
	number_str: pointer to the phone number string
	message_str: pointer to the SMS text string
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	-3 – GSM module has answered “ERROR” string
	OK ret val:
	———–
	0 – SMS was not sent
	1 – SMS was sent 9/15
	example of use:
	sms_classname.SendSMS(“00XXXYYYYYYYYY”, “SMS text”);

char SendSMS(byte sim_phonebook_position, char *message_str)
	sends SMS to the specified SIM phonebook position
	parameters and return values:
	sim_phonebook_position: SIM phonebook position <1..20>
	message_str: pointer to the SMS text string
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	-3 – specified position must be > 0
	OK ret val:
	———–
	0 – SMS was not sent
	1 – SMS was sent
	an example of usage:
	GSM gsm;
	include "sms.h";
	SMSGSM sms_classname;
	sms_classname.SendSMS(1, “SMS text”);

char IsSMSPresent(byte required_status)
	finds out if there is present at least one SMS with specified status
	if there is new SMS before IsSMSPresent() is executed this SMS has a status UNREAD and then after calling IsSMSPresent() method status of SMS is automatically changed to READ
	parameters and return values:
	required_status:
	SMS_UNREAD – new SMS – not read yet
	SMS_READ – already read SMS
	SMS_ALL – all stored SMS
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	OK ret val:
	———–
	0 – there is no SMS with specified status
	1..20 – position where SMS is stored
	example of use:
	char position;
	char phone_number[20]; // array for the phone number string
	char *sms_text;
	position = sms_classname.IsSMSPresent(SMS_UNREAD);
	if (position) { // read new SMS
	sms_classname.GetGSM(position, tel_number, &sms_text);
	}

char GetSMS(byte position, char *phone_number, char *SMS_text, byte max_SMS_len)
	reads SMS from specified memory(SIM) position
	parameters and return values:
	position: SMS position <1..20>
	phone_number: a pointer where the phone number string of received SMS will be placed
	so the space for the phone number string must be reserved – see example
	SMS_text : a pointer where SMS text will be placed
	max_SMS_len: maximum length of SMS text excluding also string terminating 0×00 character
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	-3 – specified position must be > 0
	OK ret val:
	———–
	GETSMS_NO_SMS – no SMS was found at the specified position
	GETSMS_UNREAD_SMS – new SMS was found at the specified position
	GETSMS_READ_SMS – already read SMS was found at the specified position
	GETSMS_OTHER_SMS – other type of SMS was found an example of usage:
	GSM gsm;
	include "sms.h";
	SMSGSM sms_classname;
	char position;
	char phone_num[20]; // array for the phone number string
	char sms_text[100]; // array for the SMS text string
	position = sms_classname.IsSMSPresent(SMS_UNREAD);
	if (position) {
	// there is new SMS => read it
	sms_classname.GetGSM(position, phone_num, sms_text, 100);
	Serial.println(“DEBUG SMS phone number: “, 0);
	Serial.println(phone_num, 0);
	Serial.println(“\r\n SMS text: “, 0);
	Serial.println(sms_text, 1);
	}

char GetAuthorizedSMS( byte position, char *phone_number, char *SMS_text, byte max_SMS_len, byte first_authorized_pos, byte last_authorized_pos)
	reads SMS from specified memory(SIM) position and makes authorization -
	it means SMS phone number is compared with specified SIM phonebook position(s) and in case numbers match GETSMS_AUTH_SMS is returned, otherwise GETSMS_NOT_AUTH_SMS is returned
	parameters and return values:
	position: SMS position to be read <1..20>
	phone_number: a pointer where the tel. number string of received SMS will be placed so the space for the phone number string must be reserved – see example
	SMS_text : a pointer where SMS text will be placed
	max_SMS_len: maximum length of SMS text excluding terminating 0×00 character
	first_authorized_pos: initial SIM phonebook position where the authorization process starts
	last_authorized_pos: last SIM phonebook position where the authorization proces finishes
	Note(important):
	================
	In case first_authorized_pos=0 and also last_authorized_pos=0
	the received SMS phone number is NOT authorized at all, so every
	SMS is considered as authorized (GETSMS_AUTH_SMS is returned)
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	-3 – position must be > 0
	OK ret val:
	———–
	GETSMS_NO_SMS – no SMS was found at the specified position
	GETSMS_NOT_AUTH_SMS – NOT authorized SMS found at the specified position
	GETSMS_AUTH_SMS – authorized SMS found at the specified position
	an example of usage:
	GSM gsm;
	include "sms.h";
	SMSGSM sms_classname;
	char phone_num[20]; // array for the phone number string 12/15
	char sms_text[100]; // array for the SMS text string
	// authorize SMS with SIM phonebook positions 1..3
	if (GETSMS_AUTH_SMS == sms_classname.GetAuthorizedSMS(1, phone_num, sms_text, 100, 1, 3)) {
	// new authorized SMS was detected at the SMS position 1
	Serial.println(“DEBUG SMS phone number: “, 0);
	Serial.println(phone_num, 0);
	Serial.println(“\r\n SMS text: “, 0);
	Serial.println(sms_text, 1);
	}
	// don’t authorize SMS with SIM phonebook at all
	if (GETSMS_AUTH_SMS == sms_classname.GetAuthorizedSMS(1, phone_num, sms_text, 100, 0, 0)) {
	// new SMS was detected at the SMS position 1
	// because authorization was not required
	// SMS is considered authorized
	Serial.println(“DEBUG SMS phone number: “, 0);
	Serial.println(phone_num, 0);
	Serial.println(“\r\n SMS text: “, 0);
	Serial.println(sms_text, 1);
	}

char DeleteSMS(byte position)
	deletes SMS from specified SMS position
	parameters and return values:
	position: SMS position <1..20>
	return:
	ERROR ret. val:
	—————
	-1 – comm. line to the GSM module is not free
	-2 – GSM module didn’t answer in timeout
	-3 – position must be > 0
	OK ret val:
	———–
	0 – SMS was not deleted
	1 – SMS was deleted

For HTTP functions is necessary to include the next two lines
include "inetGSM.h";
inetGSM inet_classname; //the name you choose must be the same in the functions below

int httpGET(const char* server, int port, const char* path, char* result, int resultlength)
	Send a GET request to server, at specified port, for the requested path and save the reply in a string
	parameters and return values:
	server: the name or IP address of the server
	port: number of port used for the connection
	path: pointer to the string that contains the requested path e.g. / or /test/test.html
	result: pointer to the reply string from the server
	resultlength: size of the string with result
	return:
	0 - nothing received, maybe there is an error
	other - number of byte received
	Sample: GSM_GPRSLibrary_Client

